package kernel.stl.slicing;

import kernel.stl.Facet;
import kernel.stl.LineSegmentList;
import kernel.stl.STL;
import kernel.stl.exception.InvalidZIndexException;
import kernel.stl.exception.UndefinedPointException;

/**A classe Slicer representa um fatiador.
 *O fatiador é responsável por gerar fatias do objeto tridimensional contido em
 *um STL, que é atributo desta classe.
 * @author George
 */
public class Slicer {
    
    private STL stl;
    
    /**Construtor do Fatiador. 
     * @param stl STL a ser fatiado
     */
    public Slicer(STL stl) {
        this.stl = stl;
    }
    
    /**
     * @return STL utilizado para fatiamento
     */
    public STL getSTL() {
        return this.stl;
    }
        
    /**Gera uma fatia a partir do STL contido no fatiador.
     * @param zIndex Índice z que determina onde será feita a fatia.
     * @return Fatia gerada
     * @throws kernel.stl.exception.InvalidZIndexException
     */
    public Slice slicing(double zIndex) throws InvalidZIndexException, UndefinedPointException {
        LineSegmentList lineSegmentList = new LineSegmentList();
        Facet facet;
        
        for (int i = 0; i < stl.getSolid().getFacetCount(); i++) {
            facet = stl.getSolid().getFacet(i);
            LineSegmentList list = facet.getLineSegmentListAt(zIndex);
            lineSegmentList.addLineSegmentList(list, 0);
        }
        
        Slice slice = new Slice(lineSegmentList);
        slice.setSTL(this.stl);
        return slice;
    }
    

}
